后缀数组。
假设我们现在已经求出了 $height$ 数组,我们发现,对两个后缀,其重复了的字串的个数就是 $height$ 数组所记录的数。我们举个例子:
后缀$sa[i-1]$: $aaabbdbs$
后缀$sa[i]$ : $aabbdbs$
会发现,最前面的”$aa$”是两个串都有的,”$aa$”中包含的”$a$”也是两个串都有的,这样子就有两个重复的了,可以发现这个重复个数正好是 $height[i]$ 的值。
但是后面还是有重复的啊?没关系,因为我们有所有的后缀,所以整个串中所有的重复的串都会被统计进来。所以这下子我们可以很容易的求出整个串中重复的串的个数了,就是 $\sum_{i=1}^{n}height[i]$ 。
子串的个数显然是 $\frac{n(n+1)}{2}$ ,这两项相减就是我们需要的答案了,记得开 $longlong$ 。
Code:
1 |
|
本文标题:【题解】 不同子串个数 后缀数组.SA luoguP2408
文章作者:Qiuly
发布时间:2019年04月10日 - 00:00
最后更新:2019年04月10日 - 15:28
原始链接:http://qiulyblog.github.io/2019/04/10/[题解]luoguP2408/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。